import createElement from "./createElement.js";
import vnode from "./vnode.js";
import pachVnode from "./pachVnode.js";

/**
 * patch函数：
1）先判断老节点是否为虚拟节点，不是则将其包装成虚拟节点，如果是进入下一个判断
2）在判断老虚拟节点和虚拟节点是否为同一个节点，不是则暴力删除，插入新的，如果是就进行精细化比较
 * @param {*} oldvnode 
 * @param {*} newvnode 
 */
export default function patch(oldvnode, newvnode) {
    // 判断传入的第一个参数是DOM节点还是，虚拟节点
    // console.log(oldvnode,newvnode,"asda")
    if (oldvnode.sel === '' || oldvnode.sel === undefined) {
      
        // 说明是dom节点，需要包装成虚拟节点
        oldvnode = vnode(oldvnode.tagName.toLowerCase(), {}, [], undefined, oldvnode)
    }
    // console.log(oldvnode);
    // 判断oldvnode和newvnode是否为同一节点
    if (oldvnode.key == newvnode.key && oldvnode.sel == newvnode.sel) {
        // 是同一节点，进行进行化比较
        console.log("是同一个节点123");
        pachVnode(oldvnode,newvnode)
        // pachVnode(newvnode,oldvnode)
    
    }else{
        // 不是同一节点，进行暴力插入新的，删除旧的
        console.log(newvnode,"asda");
        let newvnodeElm= createElement(newvnode)
        // 插入到老节点之前
        if(oldvnode.elm.parentNode && newvnodeElm){
            oldvnode.elm.parentNode.insertBefore(newvnodeElm,oldvnode.elm);
        }
        // 删除老节点
        oldvnode.elm.parentNode.removeChild(oldvnode.elm)
      
    }



}